<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <script>
      let arr = [1, 2, 3];

      arr.filter((item, index) => {

      });

      // arr.fn(1)(2)(3)--->arr.fn(1,2,3)--->arr.fn(1)(2)(3)
      //  如果是n ?  arr.fn(1)(2)(3)(n-1)(n)

      // 1. 函数内部可以使用全局变量。
    //   let a=100;
    //   let fn=()=>{
    //     let b ='我是函数内部的变量'
    //     console.log(a);
    //     var c=200; //函数内用var 声明的变量是局部变量
    //     d=10000    //全局变量
      
    //   }
    //   fn()
    //   console.log(b);



     // 2. 函数外部不可以使用局部变量。
     // 3. 当函数执行完毕，本作用域内的局部变量会销毁

     // 闭包（closure）指有权访问另一个函数作用域中变量的函数。
     // 简单理解就是 ，一个作用域可以访问另外一个函数内部的局部变量 
     
     // 保存函数里面的某一种状态   
     // 当函数执行完后  别的函数依然可以访问到当前函数里面的这种状态

     // 闭包优点  延展了函数作用域的范围

//      function fn1(){
//          var a = 'fn1 局部变量'
//          console.log(b);
     
//         function fn2() {
//             console.log(a);
//             var b = 'fn2 变量'
//             console.log(b);
//             console.log(a+b);
//             let res2 = a+b
//             return res2
//         }
//         return a;
//         return a+'处理一点东西'
//         return a+'fn(处理一点东西)'
//         return a+fn()

//         let res=fn2()
//         return res 
// }

// let res = fn1()
// console.log(res);

    //  作用：延伸变量的作用范围 
        //  如果是闭包 那么 fn函数里面的变量 不会立马销毁  所以 导致 fun 可以访问得到
        //  闭包的缺点  内存泄漏  

        function fn(){
            var num = 10;
            function fun() {
                alert(1)
                console.log(this);
                console.log(num);
            }
            return fun;

        }
        var f = fn();
        f()
       
        // console.log(num);


    </script>
  </body>
</html>
